<template>
  <el-dialog
    title="新增部门"
    :visible.sync="show"
    width="700px"
    @close="closeEvent"
  >
    <el-form ref="form" label-width="100px" :model="form" :rules="rules">
      <el-form-item prop="name" label="部门名称">
        <el-input v-model.trim="form.name" />
      </el-form-item>
      <el-form-item prop="code" label="部门编码">
        <el-input v-model.trim="form.code" />
      </el-form-item>
      <el-form-item prop="manager" label="部门负责人">
        <el-select v-model="form.manager" @focus="focusEvent">
          <el-option
            v-for="item in userList"
            :key="item.id"
            :label="item.username"
            :value="item.username"
          />
        </el-select>
      </el-form-item>
      <el-form-item prop="introduce" label="部门介绍">
        <el-input v-model="form.introduce" />
      </el-form-item>
    </el-form>
    <template #footer>
      <div style="text-align: center">
        <el-button>取消</el-button>
        <el-button type="primary" @click="submit">确定</el-button>
      </div>
    </template>
  </el-dialog>
</template>
<script>
import { sysUserSimple, companyDepartmentPost } from '@/api/departments'
export default {
  props: {
    initData: {
      type: Array,
      required: true
    }
  },
  // watch: {
  //   show: {
  //     handler (newVal) {
  //       if (newVal === false) {
  //         // 清空表单内的数据与验证
  //         this.$refs.form.resetFields()
  //       }
  //     }
  //   }
  // },
  data () {
    return {
      show: false,
      userList: [], // 用户列表数据
      form: {
        name: '', //	string	非必须		部门名称
        code: '', //	string	非必须		部门编码，同级部门不可重复
        manager: '', //	string	非必须		负责人名称
        introduce: '', //	string	非必须		介绍
        pid: '' //	string	非必须		父级部门ID
      },
      rules: {
        name: [
          {
            required: true,
            message: '必填',
            trigger: 'change'
          },
          {
            validator: (rule, value, callback) => {
              // 验证当前添加的子集不能有重名
              // 1：找出当前添加项的子集
              // 点击项的id就是子集的pid,只需要拿到点击项的pid
              // 点击项将id值传递给form的pid
              // 找出当前添加项的子集,子集的pid值是相同的
              const arr = this.initData.filter(
                item => item.pid === this.form.pid
              )
              // 2：验证是否重名（找出来的子集和输入的value进行比较）
              const bol = arr.some(item => item.name === value)
              // bol:true说明有重名  false:没有重名
              bol
                ? callback(new Error('请不要输入重复的部门名称:' + value))
                : callback()
            }
          }
        ], //	string	非必须		部门名称
        code: [
          {
            required: true,
            message: '必填',
            trigger: 'change'
          },
          {
            validator: (rule, value, callback) => {
              // 目标：当前输入的code值(value)不能在部门的列表(转换树形前的部门列表)中任意一项code中存在
              //   当前value,整 个部门列表  initData
              //   [{code:1},{code:2}。。。。] 验证是否有code为2的项
              //   some:只要有一个项满足条件，返回值就是true every：所有项都满足条件返回值才是true
              const bol = this.initData.some(item => {
                return item.code === value
              })
              //   bol=true说明有重复，验证失败
              //   bol=false没有重复，验证成功
              bol
                ? callback(new Error('请不要输入重复的code:' + value))
                : callback()
            },
            trigger: 'change'
          }
        ], //	string	非必须		部门编码，同级部门不可重复
        manager: [
          {
            required: true,
            message: '必填',
            trigger: 'change'
          }
        ], //	string	非必须		负责人名称
        introduce: [
          {
            required: true,
            message: '必填',
            trigger: 'change'
          }
        ] //	string	非必须		介绍
      }
    }
  },
  methods: {
    // 关闭时回调
    closeEvent () {
      this.$refs.form.resetFields()
    },
    // 获取简单员工列表
    async focusEvent () {
      if (this.userList.length === 0) {
        const res = await sysUserSimple()
        this.userList = res.data
        console.log('获取简单员工列表', res)
      }
    },
    // 全局表单验证
    submit () {
      this.$refs.form.validate(async result => {
        if (result) {
          await companyDepartmentPost(this.form)
          this.$message.success('新增部门成功')
          // 关闭弹框
          this.show = false
          // 清空表单内的数据与验证
          this.$refs.form.resetFields()
          // 刷新父级列表
          this.$emit('getData')
        }
        console.log(result)
      })
    }
  }
}
</script>
<style></style>
